떡밥위키
최근 변경
최근 토론
특수 기능
파일 올리기
작성이 필요한 문서
고립된 문서
고립된 분류
분류가 되지 않은 문서
편집된 지 오래된 문서
내용이 짧은 문서
내용이 긴 문서
차단 내역
RandomPage
라이선스
IP 사용자
216.73.216.107
설정
다크 모드로 전환
로그인
서버 점검 공지
|
개인정보 처리방침 개정 안내
C(프로그래밍 언어)
(r1 문단 편집)
닫기
RAW 편집
미리보기
==== 주의사항 ==== * gets 함수를 함부로 사용하지 않기: gets 함수는 얼마나 입력받을 지 미리 정할 수 없어 버퍼에 들어온 모든 입력을 써버리는 치명적인 문제가 존재한다. [[버퍼 오버플로]] 참조. C11부터 gets는 표준 라이브러리에서 퇴출되어 더 이상 사용할 수 없다. fgets, gets_s를 쓰도록 하자.[* 다만 fgets는 입력의 처리가 gets와 조금 다르고, gets_s는 GCC와 LLVM/Clang에서는 지원하지 않으니 잘 알아보고 쓸 필요가 있다.] C언어 입문서에서 흔히 사용되는 scanf도 마찬가지로 문자열을 읽어들일 때 버퍼 오버플로 문제를 야기할 수 있으며 이쪽도 대안으로 VC++ 컴파일러의 scanf_s가 존재한다.[* 비표준 함수로 windows에서만 사용 가능하다. C11 이후로는 표준함수로 지정이 되었으나 선택적으로 구현 가능한 함수로 지정되어 컴파일러에 따라 사용이 불가능한 경우가 있다.] 같이 쓰이는 puts와 printf의 경우에는 출력 함수라 버퍼 오버플로 문제가 존재하지 않는다.[* 다만 printf의 경우 별도로 포맷 스트링 문제가 존재한다.] * short 자료형을 특별한 이유 없이 사용하지 말기: 32비트 아키텍처 이상 CPU는 자료형의 팩/언팩 작업 때문에 short 자료형의 퍼포먼스가 int형보다 오히려 더 낮으며 오버플로 위험만 높인다. * 간단한 함수를 전부 #define 매크로로 작성하는 것을 피하기: #define은 전처리 시점에서 특정 코드를 미리 정해놓은 코드로 통째로 치환시키는 전처리문으로 실행 시 별도로 함수를 불러오는 오버 헤드가 발생하지 않는다는 이점이 있다. 이로 인해 과거 컴퓨터 성능이 좋지 못하던 시절에는 간단한 함수를 매크로로 작성하는 방법으로 프로그램의 속도 향상을 꾀할 수 있었다. 그러나 현대에는 컴퓨터 성능이 상당히 좋아졌기에 이 정도의 오버 헤드는 크게 문제되지 않는다. 또한 #define은 정해진 코드를 통째로 치환하기 때문에 예상치 못한 동작을 보일 수 있으므로 사용에 주의가 필요하다. 또한 매크로의 경우 IDE에서 Step 디버그 시 다소 애로사항이 생기기도 하므로 단순히 자주 사용되는 작은 크기의 함수를 위해서는 {{{inline}}} attribute 사용이 권장된다. 특히 {{{inline}}}의 경우 컴파일러가 코드 상황에 따라 인라인을 결정하고 꼭 필요하다면 {{{__forceinline}}}(MSVC/ICC)나 {{{always_inline}}}(GCC/Clang)를 사용해서 무조건 인라인을 시키는 방법도 있기 때문.
요약
문서 편집을
저장
하면 당신은 기여한 내용을
CC BY-NC-SA 2.0 KR
또는
기타 라이선스 (문서에 명시된 경우)
로 배포하고 기여한 문서에 대한 하이퍼링크나 URL을 이용하여 저작자 표시를 하는 것으로 충분하다는 데 동의하는 것입니다. 이
동의는 철회할 수 없습니다.
비로그인 상태로 편집합니다. 로그인하지 않은 상태로 문서 편집을 저장하면, 편집 역사에 본인이 사용하는 IP(216.73.216.107) 주소 전체가 영구히 기록됩니다.
저장
사용자
216.73.216.107
IP 사용자
로그인
회원가입
최근 변경
[불러오는 중...]
최근 토론
[불러오는 중...]